//promise
// 1. Promise ES6原生提供的一个对象， 此对象是构造函数， 可以获取异步请求的信息
// 2. Promise 是解决异步变成的方案， 可以把异步操作以同步操作流的方式写出来， 不用再层层嵌套
// 3. 参数是resolve（ 成功执行的函数） reject（ 失败执行的函数）， 两个参数都是函数

//Promise.prototype.then(成功的回调，失败的回调)；
//Promise.prototype.catch(失败的回调)
//Promise.prototype.finally(回调函数)  不管状态成功还是失败都执行这个函数

// let p = new Promise((resolve, reject) => {
//     resolve("success") //成功的函数
// })
// p.then((res) => {
//     console.log(res) //success
// }).finally(() => {
//     console.log(12123)
// })

// let p = new Promise((resolve, reject) => {
//         reject("失败") //失败的函数
//     })
//     //失败写法一
// p.then((res) => {
//     console.log(res)
// }).catch((rem) => {
//     console.log(rem) //打印失败
// }).finally(() => {
//     console.log(12123)
// })


// let p = new Promise((resolve, reject) => {
//     reject("失败") //失败的函数
// })
// // 失败写法二
// p.then((res) => {
//         console.log(res)
//     }, (ress) => {
//         console.log(ress)//打印失败
//     })


// Promise 应用1  ajax
// function ajax(url) {
//     return new Promise((resolve, reject) => {
//         let xhr = new XMLHttpRequest();
//         xhr.open('GET', url, true);
//         xhr.send(null);
//         xhr.onreadystatechange = () => {
//             if (xhr.readyState != 4) {
//                 return
//             }
//             if (xhr.status == 200) {
//                 resolve(xhr.responseText)
//             } else {
//                 reject("error")
//             }
//         }
//     })
// }
// ajax(接口路径).then((res) => {
//     console.log(res)
// }).catch((error) => {
//     console.log(error)
// })

// //Promise 应用2 图片加载
// function getImg(url) {
//     return new Promise((resolve, reject) => {
//         let img = new Image();
//         img.src = url;
//         img.onload = () => {
//             resolve(img)
//         }
//         img.onerror = () => {
//             reject(new Error('error'))
//         }
//     })
// }
// getImg(图片路径).then((res) => {
//     document.body.appendChild(res)
// }).catch((error) => {
//     console.log(error)
// })

//Promise.prototype.all([promise1,promise2,...]) 
// 把多个promise对象包装成一个promise对象,只要有一个报错就不执行then 函数

//Promise.prototype.race([promise1,promise2,...]) 
//把多个promise对象包装成一个promise对象,只要有一个成功，就可以执行then 函数